home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-08-14 | 9.3 KB | 289 lines | [TEXT/MPS ] |
- // File BoxModel.c
-
- #include <Memory.h>
- #include <OSUtils.h>
-
- #include "BoxModel.h"
- /*
- contains the following:
-
- TQ3GroupObject MakeBox(void);
- void DisposeBoxModel(TQ3GroupObject model);
- VccPtr BoxDataToVCC(TQ3Object theObj);
- void VCCtoBoxData(VccPtr vcc, TQ3BoxData *boxData);
-
- */
-
- static void InitBoxData(TQ3BoxData *boxData);
- static void MakeFaceAttributes(TQ3BoxData *boxData);
- static void SetBoxResetValues(TQ3BoxData *boxData, VccPtr vcc);
-
- extern Rect gContrlRect;
-
-
- //----------------------------------------------------------------------------------
- static void InitBoxData(TQ3BoxData *boxData)
- {
- float height = 6;
- float width = 6;
- float depth = 6;
-
-
- Q3Point3D_Set(&boxData->origin, -width/2, -height/2, -depth/2);
- Q3Vector3D_Set(&boxData->orientation, 0, height, 0);
- Q3Vector3D_Set(&boxData->majorAxis, width, 0, 0);
- Q3Vector3D_Set(&boxData->minorAxis, 0, 0, depth);
-
- boxData->boxAttributeSet = NULL;
- boxData->faceAttributeSet = NULL;
- }
-
- //----------------------------------------------------------------------------------
- static void MakeFaceAttributes(TQ3BoxData *boxData)
- {
- TQ3Status status;
- TQ3ColorRGB faceColor;
- TQ3ColorRGB specColor;
- TQ3ColorRGB transColor;
- float ambientCoeff;
- float specularCntl;
- long i;
-
- boxData->faceAttributeSet = (TQ3AttributeSet *)NewPtrClear(sizeof(TQ3AttributeSet) * 6);
- if (boxData->faceAttributeSet == NULL)
- return;
-
- for (i = 0; i < 6; i++)
- boxData->faceAttributeSet[i] = NULL;
-
- faceColor.r = 0.0;
- faceColor.g = 1.0;
- faceColor.b = 0.0;
-
- specColor.r = 0.0;
- specColor.g = 0.0;
- specColor.b = 1.0;
-
- transColor.r = 0.0;
- transColor.g = 1.0;
- transColor.b = 0.0;
-
- ambientCoeff = 0.5;
- specularCntl = 0.5;
-
- for (i = 0; i < 6; i++) {
- boxData->faceAttributeSet[i] = Q3AttributeSet_New();
- if (boxData->faceAttributeSet[i] != nil) {
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeDiffuseColor, &faceColor);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeSpecularColor, &specColor);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeSpecularColor, &transColor);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeAmbientCoefficient, &ambientCoeff);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeSpecularControl, &specularCntl);
- }
- }
- }
-
-
- //----------------------------------------------------------------------------------
- TQ3GroupObject MakeBox(void)
- {
- TQ3GroupObject model;
- TQ3GeometryObject box;
- TQ3GroupPosition position;
- TQ3BoxData boxData;
- TQ3Status status;
- long i;
-
- InitBoxData(&boxData);
- MakeFaceAttributes(&boxData);
-
- box = Q3Box_New(&boxData); if (box == nil) return nil;
- model = Q3OrderedDisplayGroup_New(); if (model == nil) return nil;
- position = Q3Group_AddObject(model, box); if (position == nil) return nil;
-
- if (boxData.boxAttributeSet != nil)
- Q3Object_Dispose(boxData.boxAttributeSet);
-
- if (boxData.faceAttributeSet != nil) {
- for (i = 0; i < 6; i++)
- if (boxData.faceAttributeSet[i] != nil)
- Q3Object_Dispose(boxData.faceAttributeSet[i]);
-
- DisposePtr((Ptr)boxData.faceAttributeSet);
- }
-
- Q3Object_Dispose(box);
-
- return model;
- }
-
-
-
- //----------------------------------------------------------------------------------
- void DisposeBoxModel(TQ3GroupObject model)
- {
- Q3Group_EmptyObjects(model);
- Q3Object_Dispose(model);
- }
-
- //----------------------------------------------------------------------------------
- VccPtr BoxDataToVCC(TQ3Object theObj)
- {
- TQ3BoxData boxData;
- TQ3AttributeSet attrSet;
- TQ3Status status;
- VccPtr vcc;
- TQ3ColorRGB faceColor;
- TQ3ColorRGB specColor;
- TQ3ColorRGB transColor;
- float ambientCoeff;
- float specularCntl;
- long i;
-
- status = Q3Box_GetData( theObj, &boxData );
- if (status == kQ3Failure)
- return;
-
- vcc = NewVCluster((long)kQ3GeometryTypeBox, "\pBoxData", 30, &gContrlRect);
- if (vcc == nil) {
- SysBeep(10); // ErrMsg("\pNewVCluster failed");
- return nil;
- }
-
- AddValueCtl(vcc, "\porigin.x", boxData.origin.x, -20.0, 20.0, 1.0); // [0]
- AddValueCtl(vcc, "\porigin.y", boxData.origin.y, -20.0, 20.0, 1.0);
- AddValueCtl(vcc, "\porigin.z", boxData.origin.z, -20.0, 20.0, 1.0);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\porientation.x", boxData.orientation.x, 0.0, 10.0, 0.5); // [4]
- AddValueCtl(vcc, "\porientation.y", boxData.orientation.y, 0.0, 10.0, 0.5);
- AddValueCtl(vcc, "\porientation.z", boxData.orientation.z, 0.0, 10.0, 0.5);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\pmajorAxis.x", boxData.majorAxis.x, 0.0, 10.0, 0.5); // [8]
- AddValueCtl(vcc, "\pmajorAxis.y", boxData.majorAxis.y, 0.0, 10.0, 0.5);
- AddValueCtl(vcc, "\pmajorAxis.z", boxData.majorAxis.z, 0.0, 10.0, 0.5);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\pminorAxis.x", boxData.minorAxis.x, 0.0, 10.0, 0.5); // [12]
- AddValueCtl(vcc, "\pminorAxis.y", boxData.minorAxis.y, 0.0, 10.0, 0.5);
- AddValueCtl(vcc, "\pminorAxis.z", boxData.minorAxis.z, 0.0, 10.0, 0.5);
- AddSeparator(vcc);
-
- attrSet = boxData.faceAttributeSet[0];
- status = Q3AttributeSet_Get(attrSet, kQ3AttributeTypeDiffuseColor, &faceColor);
- status = Q3AttributeSet_Get(attrSet, kQ3AttributeTypeSpecularColor, &specColor);
- status = Q3AttributeSet_Get(attrSet, kQ3AttributeTypeSpecularColor, &transColor);
- status = Q3AttributeSet_Get(attrSet, kQ3AttributeTypeAmbientCoefficient, &ambientCoeff);
- status = Q3AttributeSet_Get(attrSet, kQ3AttributeTypeSpecularControl, &specularCntl);
-
- AddValueCtl(vcc, "\pfaceColor.r", faceColor.r, 0.0, 1.0, 0.1); // [16]
- AddValueCtl(vcc, "\pfaceColor.g", faceColor.g, 0.0, 1.0, 0.1);
- AddValueCtl(vcc, "\pfaceColor.b", faceColor.b, 0.0, 1.0, 0.1);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\pspecColor.r", specColor.r, 0.0, 1.0, 0.1); // [20]
- AddValueCtl(vcc, "\pspecColor.g", specColor.g, 0.0, 1.0, 0.1);
- AddValueCtl(vcc, "\pspecColor.b", specColor.b, 0.0, 1.0, 0.1);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\ptransColor.r", transColor.r, 0.0, 1.0, 0.1); // [24]
- AddValueCtl(vcc, "\ptransColor.g", transColor.g, 0.0, 1.0, 0.1);
- AddValueCtl(vcc, "\ptransColor.b", transColor.b, 0.0, 1.0, 0.1);
- AddSeparator(vcc);
- AddValueCtl(vcc, "\pambientCoefficient", ambientCoeff, 0.0, 1.0, 0.1); // [28]
- AddValueCtl(vcc, "\pspecularControl", specularCntl, 0.0, 25.0, 2.5);
-
- // ErBoxData_Empty(&boxData); // releases memory allocated in Q3Box_GetData
- // Q3Box_EmptyData(&boxData); // releases memory allocated in Q3Box_GetData
- // •• not in my shared library yet
-
- if (boxData.faceAttributeSet != NULL)
- for (i = 0; i < 6; i++)
- if (boxData.faceAttributeSet[i] != NULL)
- InitBoxData(&boxData); // to bring in the original reset values (not for attributes)
- SetBoxResetValues(&boxData, vcc);
-
- return vcc;
- }
-
-
- //----------------------------------------------------------------------------------
- void VCCtoBoxData(VccPtr vcc, TQ3BoxData *boxData)
- {
- TQ3Status status;
- TQ3ColorRGB faceColor;
- TQ3ColorRGB specColor;
- TQ3ColorRGB transColor;
- float ambientCoeff;
- float specularCntl;
- long i;
-
- boxData->origin.x = GetCurrentValue(vcc, 0);
- boxData->origin.y = GetCurrentValue(vcc, 1);
- boxData->origin.z = GetCurrentValue(vcc, 2);
-
- boxData->orientation.x = GetCurrentValue(vcc, 4);
- boxData->orientation.y = GetCurrentValue(vcc, 5);
- boxData->orientation.z = GetCurrentValue(vcc, 6);
-
- boxData->majorAxis.x = GetCurrentValue(vcc, 8);
- boxData->majorAxis.y = GetCurrentValue(vcc, 9);
- boxData->majorAxis.z = GetCurrentValue(vcc, 10);
-
- boxData->minorAxis.x = GetCurrentValue(vcc, 12);
- boxData->minorAxis.y = GetCurrentValue(vcc, 13);
- boxData->minorAxis.z = GetCurrentValue(vcc, 14);
- // separator
- faceColor.r = GetCurrentValue(vcc, 16);
- faceColor.g = GetCurrentValue(vcc, 17);
- faceColor.b = GetCurrentValue(vcc, 18);
-
- specColor.r = GetCurrentValue(vcc, 20);
- specColor.g = GetCurrentValue(vcc, 21);
- specColor.b = GetCurrentValue(vcc, 22);
-
- transColor.r = GetCurrentValue(vcc, 24);
- transColor.g = GetCurrentValue(vcc, 25);
- transColor.b = GetCurrentValue(vcc, 26);
-
- ambientCoeff = GetCurrentValue(vcc, 28);
- specularCntl = GetCurrentValue(vcc, 29);
-
- for (i = 0; i < 6; i++) {
- Q3AttributeSet_Empty(boxData->faceAttributeSet[i]);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeDiffuseColor, &faceColor);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeSpecularColor, &specColor);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeSpecularColor, &transColor);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeAmbientCoefficient, &ambientCoeff);
- status = Q3AttributeSet_Add(boxData->faceAttributeSet[i],
- kQ3AttributeTypeSpecularControl, &specularCntl);
- }
- }
-
-
- //----------------------------------------------------------------------------------
- void SetBoxResetValues(TQ3BoxData *boxData, VccPtr vcc)
- {
- SetResetValue(vcc, 0, boxData->origin.x);
- SetResetValue(vcc, 1, boxData->origin.y);
- SetResetValue(vcc, 2, boxData->origin.z);
-
- SetResetValue(vcc, 4, boxData->orientation.x);
- SetResetValue(vcc, 5, boxData->orientation.y);
- SetResetValue(vcc, 6, boxData->orientation.z);
-
- SetResetValue(vcc, 8, boxData->majorAxis.x);
- SetResetValue(vcc, 9, boxData->majorAxis.y);
- SetResetValue(vcc, 10, boxData->majorAxis.z);
-
- SetResetValue(vcc, 12, boxData->minorAxis.x);
- SetResetValue(vcc, 13, boxData->minorAxis.y);
- SetResetValue(vcc, 14, boxData->minorAxis.z);
- }
-
-